/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved.
 *
 */

import { cloneDeep } from '@baize/wdk';

import { findTargetProduct } from '../../common/find-target-product.js';
import { projectOhosConfigManager } from '../../common/global/project-ohos-config-manager.js';
import { AppJson } from '../../options/configure/app-json-options.js';
import { ModuleJson } from '../../options/configure/module-json-options.js';
import { ModuleTaskService } from '../../tasks/service/module-task-service.js';
import { OhosLogger } from '../log/ohos-logger.js';
import AppOptObj = AppJson.AppOptObj;
import ModuleOptObj = ModuleJson.ModuleOptObj;
import { AppOpt } from '../../options/build/app-ohos-config.js';

const _log = OhosLogger.getLogger('hvigor-validateSystemHsp');

/**
 * 校验在系统hsp的配置下不可以打包（当前在har 和hap 中进行引用校验）
 *
 * @param  service 模块任务
 * @param appOptObj appjson5对象
 * @param  targetJsonPath json5文件路径
 * @param  targetModuleOptObj 模块对象
 */
export function validatePackageBySystemHspModel(
  service: ModuleTaskService,
  appOptObj: AppOptObj,
  targetJsonPath: string,
  targetModuleOptObj: ModuleOptObj,
): void {
  // 获取工程级的 build-profile.json5  中 当前 product 的 bundleType 值, 不存在去获取 app.json
  const appOptFromConfig: AppOpt = cloneDeep(projectOhosConfigManager.getOverrides()?.appOpt);
  const productBuildOpt = findTargetProduct(service.getProjectModel());
  const bundleType = appOptFromConfig?.bundleType ?? productBuildOpt.bundleType ?? appOptObj.app.bundleType;
  if (bundleType === 'shared' || bundleType === 'appPlugin') {
    _log.printErrorExit('BUNDLETYPE_NOT_MATCH', [bundleType, bundleType, targetModuleOptObj.module.name, targetJsonPath], [[bundleType, targetModuleOptObj.module.name]]);
  }
}
